package feed.dao;
import feed.conexion.DataBaseInstance;
import static feed.conexion.DataBaseInstance.closeConnection;
import feed.entity.TipoCuenta;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JOptionPane;

public class TipoCuentaDao {

    protected Connection getConnection() {
        return DataBaseInstance.getInstanceConnection();
    }
    public void save(TipoCuenta tipocuenta) {
        PreparedStatement saveTipoCuenta;
        try {
            saveTipoCuenta = getConnection().prepareStatement(
                    "INSERT INTO APP.tipocuenta (nombre,descripcion)VALUES ( ?, ?)");
            
            saveTipoCuenta.setString(1, tipocuenta.getNombre());
            saveTipoCuenta.setString(2, tipocuenta.getDescripcion());
            saveTipoCuenta.executeUpdate();
            closeConnection();
            System.out.println("INSERT INTO ...."+ tipocuenta.getNombre()+" "+ tipocuenta.getDescripcion());
        } catch (SQLException se) {
            JOptionPane.showMessageDialog(null, "No se ha podido realizar la operación!\n\n"+se, "Error de datos", JOptionPane.ERROR_MESSAGE);
            
        }
    }
    
    public void update(TipoCuenta tipocuenta) {
        PreparedStatement saveTipoCuenta;
        try {
            saveTipoCuenta = getConnection().prepareStatement(
                 "UPDATE APP.tipocuenta SET nombre = ?, descripcion = ? WHERE  id = ?");
            saveTipoCuenta.setString(1, tipocuenta.getNombre());
            saveTipoCuenta.setString(2, tipocuenta.getDescripcion());
            saveTipoCuenta.setInt(3, tipocuenta.getId());
            saveTipoCuenta.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            JOptionPane.showMessageDialog(null, "No se ha podido realizar la operación!\n\n"+se, "Error de datos", JOptionPane.ERROR_MESSAGE);
        }
    }

    public void delete(TipoCuenta tipocuenta) {
        PreparedStatement delTipoCuenta;
        try {
            delTipoCuenta = getConnection().prepareStatement(
                    "DELETE FROM APP.tipocuenta WHERE id = ?");
            delTipoCuenta.setInt(1, tipocuenta.getId());
            delTipoCuenta.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            JOptionPane.showMessageDialog(null, "No se ha podido realizar la operación!\n\n"+se, "Error de datos", JOptionPane.ERROR_MESSAGE);
        }
    }

     public Object [][] getDatos(){
        int posid = 0;
        try{
            PreparedStatement pstm = getConnection().prepareStatement("SELECT count(1) as total FROM app.tipocuenta");
            ResultSet res = pstm.executeQuery();
            res.next();
            posid = res.getInt("total");
            res.close();
            }catch(SQLException e){
                JOptionPane.showMessageDialog(null, e);
        }
        Object[][] data = new String[posid][3];
        try{
            PreparedStatement pstm = getConnection().prepareStatement("SELECT id,nombre,descripcion FROM app.tipocuenta");
            ResultSet res = pstm.executeQuery();
            int increment = 0;
            while(res.next()){ 
                String estId = Integer.toString(res.getInt("id"));
                String estNombre = res.getString("nombre");
                String estDescripcion = res.getString("descripcion");
                data[increment][0] = estId;
                data[increment][1] = estNombre;
                data[increment][2] = estDescripcion;
                increment++;
            }
            res.close();
            }catch(SQLException e){
                JOptionPane.showMessageDialog(null, e);
        }
        return data;
    }

    protected void closeConnection() {
        DataBaseInstance.closeConnection();
        System.out.println("Conexion cerrada...");
    }
}
